/*
 *  用于控制scene(场景)切换的系统模块,即flow(流程)
 */
#ifndef _SYS_FLOW_H_
#define _SYS_FLOW_H_

#include <stdint.h>
#include "scene_base.h"

//场景进场/出场方式,可以'或'使用
typedef enum {
    //直接消失
    SFCT_NONE = 0,
    //渐变
    SFCT_SHADOW = 1,
    //上/下平移
    SFCT_MOV_TOP = 2,
    SFCT_MOV_BOTTOM = 4,
    //左/右平移
    SFCT_MOV_LEFT = 8,
    SFCT_MOV_RIGHT = 16,
    //横/纵向关门式
    SFCT_CLOSE_X = 32,
    SFCT_CLOSE_Y = 64,
} SysFlowCutType;

//加载/切换场景
int32_t SysFlowNext(
    Scene *nextScene,
    int32_t frame = 1, //多少帧之内完成切换
    SysFlowCutType leaveType = SFCT_NONE,
    SysFlowCutType enterType = SFCT_NONE);

/*
 *  回退场景
 *  回退时原场景会被delete释放内存
 */
int32_t SysFlowPrevious(
    int32_t frame = 1,
    SysFlowCutType leaveType = SFCT_NONE,
    SysFlowCutType enterType = SFCT_NONE);

/*
 *  插入场景,原场景暂停,该场景结束后继续原场景
 *  如果中途调用 SysFlowPrevious() 会和原场景一起被结束
 */
int32_t SysFlowInsert(
    Scene *insertScene,
    int32_t frame = 1,
    SysFlowCutType enterType = SFCT_NONE);

#endif // _SYS_FLOW_H_
